feat: Update OpenAI runners to implement Runner protocol returning RunnerResult#149
feat: Update OpenAI runners to implement Runner protocol returning RunnerResult#149jsonbailey wants to merge 2 commits intojb/aic-2388/managed-resultfrom
Conversation
bd4cd68 to
45441da
Compare
f1845b4 to
94f09ee
Compare
45441da to
27bcfc0
Compare
94f09ee to
8463109
Compare
27bcfc0 to
ff47ec2
Compare
eacddee to
842e4e6
Compare
2ea3384 to
369242d
Compare
842e4e6 to
4c95357
Compare
369242d to
b8d3fad
Compare
4c95357 to
3f6882c
Compare
b8d3fad to
4e28ae6
Compare
3f6882c to
efeea93
Compare
|
|
||
|
|
||
| class OpenAIAgentRunner(AgentRunner): | ||
| class OpenAIAgentRunner: |
There was a problem hiding this comment.
we should add the Runner protocol here vs stating it in the doc below
| @@ -14,10 +14,15 @@ | |||
|
|
|||
| class OpenAIModelRunner(ModelRunner): | |||
There was a problem hiding this comment.
This should be switched to the Runner protocol.
| self._model_name = model_name | ||
| self._parameters = parameters | ||
|
|
||
| async def invoke_model(self, messages: List[LDMessage]) -> ModelResponse: |
There was a problem hiding this comment.
Missing deprecated adapters breaks backward compatibility with callers
Medium Severity
The PR description states "Legacy invoke_model() and invoke_structured_model() retained as deprecated adapters that delegate to run() for backward compatibility," but these methods are completely absent from OpenAIModelRunner. The SDK's ManagedModel.invoke() calls self._model_runner.invoke_model() directly without an isinstance check, and Judge.evaluate() calls self._model_runner.invoke_structured_model(). If an OpenAIModelRunner instance is used through either of these existing code paths, it will raise AttributeError at runtime.
Reviewed by Cursor Bugbot for commit efeea93. Configure here.
330acf1 to
cd983aa
Compare
7352a34 to
adfd9f0
Compare
cd983aa to
184be64
Compare
adfd9f0 to
b4d15df
Compare
3556ba4 to
b5f15b7
Compare
9254ccc to
d113d46
Compare
…nnerResult - OpenAIModelRunner.run() implements the unified Runner protocol; returns RunnerResult with content, metrics (LDAIMetrics), raw, and parsed fields. Structured output is supported via the output_type parameter. - OpenAIAgentRunner.run() updated to return RunnerResult; populates tool_calls in LDAIMetrics from observed openai-agents ToolCallItems. - Legacy invoke_model() and invoke_structured_model() retained as deprecated adapters that delegate to run() and wrap results into ModelResponse / StructuredResponse for backward compatibility. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nner Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
d113d46 to
2878bda
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 2878bda. Configure here.
| tool_calls = [ | ||
| tool_name | ||
| for _agent_name, tool_name in get_tool_calls_from_run_items(result.new_items) | ||
| ] |
There was a problem hiding this comment.
Agent runner reports function names instead of config keys
Medium Severity
The tool_calls list in LDAIMetrics is populated with raw runtime names from get_tool_calls_from_run_items (which returns Python __name__ values for custom function tools), rather than the LD config key names. The graph runner correctly builds a _tool_name_map (mapping fn.__name__ → config key) and uses it when tracking tool calls. The agent runner lacks this mapping, so it reports e.g. my_weather_function instead of the config name get-weather. This is inconsistent with the graph runner and with the tracker's documented semantics ("List of tool keys that were invoked").
Reviewed by Cursor Bugbot for commit 2878bda. Configure here.


Summary
Stacking
Stacked on top of `jb/aic-2388/managed-result` (PR #148).
Test plan
🤖 Generated with Claude Code
Note
Medium Risk
Medium risk because it changes the provider runner interface and result shape (e.g.,
runsignatures andRunnerResultfields), which can break downstream integrations even though behavior is largely preserved.Overview
Updates the OpenAI provider runners to the unified
Runnerprotocol, replacing legacyAgentRunner/ModelRunnerreturn types withRunnerResult(content,raw, optionalparsed).OpenAIModelRunner.runnow accepts either a prompt string orLDMessagelist and supports structured output viaoutput_type(JSON schema), parsing JSON intoRunnerResult.parsedwhen requested.OpenAIAgentRunner.runnow returnsRunnerResultand records observed tool invocations inLDAIMetrics.tool_callsby extracting tool call items fromopenai-agentsrun results.Tests are updated to assert the new
run()behavior andRunnerResultfields for both chat completions and structured output paths, and to reflect the agent runner’s new result shape.Reviewed by Cursor Bugbot for commit 2878bda. Bugbot is set up for automated code reviews on this repo. Configure here.